package com.my.study.springframework.test.proxy.cglib;

import net.sf.cglib.proxy.Enhancer;

/**
 * @author: yidujun
 * @create: 2021/07/13 14:43
 */
public class MoneyProxy {

    @SuppressWarnings("unchecked")
    public <T> T getEnhanceInstance(Class<T> clazz) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(clazz);
        // 只是生成代理对象，没有对被代理对象进行增强的功能
        // 如果想增强额外功能，可以实现MethodInterceptor接口，在intercept()方法中添加额外的功能！！！
        enhancer.setCallback(new MoneyMethodEnhancer());
//        enhancer.setCallback(new NoOp() {
//            @Override
//            public int hashCode() {
//                return super.hashCode();
//            }
//        });

        return (T) enhancer.create();
    }

}
